﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using System.ComponentModel.Design;

namespace DynamicMenu
{
    public class DynamicItemMenuCommand : OleMenuCommand
    {
        private Predicate<int> matches;
        public DynamicItemMenuCommand(CommandID rootId,
            Predicate<int> matches,
            EventHandler invokeHandler,
            EventHandler beforeQueryStatusHandler)
            : base(invokeHandler, null /*changeHandler*/, beforeQueryStatusHandler, rootId)
        {
            if (matches == null)
            {
                throw new ArgumentNullException("matches");
            }

            this.matches = matches;
        }

        public override bool DynamicItemMatch(int cmdId)
        {
            //调用提供的谓词以测试给定的cmd id是否为匹配。
            //如果它是，将命令ID存储在匹配的commandid中
            //以任何在查询状态处理程序之前使用，然后返回它是匹配项。
            //否则清除任何先前存储的匹配的CMD ID并返回它不是匹配的。
            if (this.matches(cmdId))
            {
                this.MatchedCommandId = cmdId;
                return true;
            }

            this.MatchedCommandId = 0;
            return false;
        }
    }

}
